package bean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import Persistencia.*;

public class MovimientoRodeo implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	//lo puse para la base de datos, en el programa no lo uso, si no sirve se saca
	private Long id;
	
	private String codigo;
	private int legajo;	//validar legajo
	private Date fecha;
	private int nacimientos;
	private int muertes;
	private int abortos;
	private int transferenciaDescarte;
	private int transferenciaRodeo;
	private ArrayList<Rodeo> rodeos;
	
	public MovimientoRodeo(String codigo, int legajo, Date fecha) {
		super();
		this.codigo = codigo;
		this.legajo = legajo;
		this.fecha = fecha;
		//this.nacimientos = 0;
		//this.muertes = 0;
		//this.abortos = 0;
		//this.transferenciaDescarte = 0;
		//this.transferenciaRodeo = 0;
		this.rodeos = null;
	}
	
	public MovimientoRodeo(){}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public String getCodigo() {
		return codigo;
	}

	public int getLegajo() {
		return legajo;
	}

	public void setLegajo(int legajo) {
		this.legajo = legajo;
	}

	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	public int getNacimientos() {
		return nacimientos;
	}

	public void setNacimientos(int nacimientos) {
		this.nacimientos = nacimientos;
	}

	public int getMuertes() {
		return muertes;
	}

	public void setMuertes(int muertes) {
		this.muertes = muertes;
	}

	public int getAbortos() {
		return abortos;
	}

	public void setAbortos(int abortos) {
		this.abortos = abortos;
	}

	public int getTransferenciaDescarte() {
		return transferenciaDescarte;
	}

	public void setTransferenciaDescarte(int transferenciaDescarte) {
		this.transferenciaDescarte = transferenciaDescarte;
	}

	public int getTransferenciaRodeo() {
		return transferenciaRodeo;
	}

	public void setTransferenciaRodeo(int transferenciaRodeo) {
		this.transferenciaRodeo = transferenciaRodeo;
	}

	public ArrayList<Rodeo> getRodeos() {
		return rodeos;
	}

	public void setRodeos(ArrayList<Rodeo> rodeos) {
		this.rodeos = rodeos;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + abortos;
		result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
		result = prime * result + ((fecha == null) ? 0 : fecha.hashCode());
		result = prime * result + legajo;
		result = prime * result + muertes;
		result = prime * result + nacimientos;
		result = prime * result + transferenciaDescarte;
		result = prime * result + transferenciaRodeo;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		MovimientoRodeo other = (MovimientoRodeo) obj;
		if (abortos != other.abortos)
			return false;
		if (codigo == null) {
			if (other.codigo != null)
				return false;
		} else if (!codigo.equals(other.codigo))
			return false;
		if (fecha == null) {
			if (other.fecha != null)
				return false;
		} else if (!fecha.equals(other.fecha))
			return false;
		if (legajo != other.legajo)
			return false;
		if (muertes != other.muertes)
			return false;
		if (nacimientos != other.nacimientos)
			return false;
		if (transferenciaDescarte != other.transferenciaDescarte)
			return false;
		if (transferenciaRodeo != other.transferenciaRodeo)
			return false;
		return true;
	}
	
	@Override
	public String toString() {
		return "MovimientoRodeo [abortos=" + abortos + ", codigo=" + codigo
				+ ", fecha=" + fecha + ", legajo=" + legajo + ", muertes="
				+ muertes + ", nacimientos=" + nacimientos
				+ ", transferenciaDescarte=" + transferenciaDescarte
				+ ", transferenciaRodeo=" + transferenciaRodeo + "]";
	}
	
	public Rodeo buscarRodeo(String cod){
		Rodeo r = null;
		for(Iterator<Rodeo> i=rodeos.iterator();i.hasNext();){
			r = i.next();
			if(r.getCodigo().equals(cod))
				return r;
		}
		AdmPersistenciaRodeo.getInstancia().select(this);
	}
	
	//agrego un rodeo: es una linea en el mov de rodeo con el id del rodeo para identificarlo
	//y poder buscarlo para actualizar el rodeo.
	//No actualizo en la BD el rodeo porque no me interesa!!!
	public void modificarMovimientoRodeo(String codR, int nac, int muert, int ab, 
			int transfD, int transfR){
		Rodeo r = new Rodeo();
		r.setCodigo(codR);
		r.setNacimientos(nac);
		r.setMuertes(muert);
		r.setAbortos(ab);
		r.setTransferenciaDescarte(transfD);
		r.setTransferenciaRodeo(transfR);
		
		rodeos.add(r);
		AdmPersistenciaMovRodeo.getInstancia().update(this);
	}
	
	private void eliminarRodeoDeMovimiento(String cod){
		Rodeo r = buscarRodeo(cod);
		rodeos.remove(r);
		AdmPersistenciaRodeo.getInstancia().delete(r);
	}	
	
	public void eliminarMovRodeo(String cod)
	{
		this.eliminarRodeoDeMovimiento(cod);
		AdmPersistenciaMovRodeo.getInstancia().delete(this);
	}
}
